home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 06 - 1990 / 06.09 Sep 90 / LSObjectShell / MyShapes.p next >
Encoding:
Text File  |  1989-10-15  |  2.3 KB  |  120 lines  |  [TEXT/PJMM]

  1. UNIT MyShapes;
  2. {***********************************}
  3. INTERFACE
  4.  
  5.     USES
  6.         MemTypes, QuickDraw, OSIntf, ToolIntf, PackIntf, MacPrint, ObjIntf, GlobalStuff, MyDialogs;
  7.  
  8.     TYPE
  9.         TShape = OBJECT(TObject)
  10.                 fPt: Point;
  11.                 oDialog: TDialog;
  12.                 PROCEDURE Create (vPt: Point);
  13.                 PROCEDURE Free;
  14.                 override;
  15.             END;
  16.  
  17.         TOvals = OBJECT(TShape)
  18.                 PROCEDURE Create (vPt: Point);
  19.                 override;
  20.             END;
  21.  
  22.         TSpirals = OBJECT(TShape)
  23.                 PROCEDURE Create (vPt: Point);
  24.                 override;
  25.             END;
  26.  
  27. {***********************************}
  28. IMPLEMENTATION
  29.  
  30.     PROCEDURE TShape.Create (vPt: Point);
  31.     BEGIN
  32.     END; {Create}
  33.  
  34. {----------------------------------------}
  35.     PROCEDURE TShape.Free;
  36.     BEGIN
  37.         IF oDialog <> NIL THEN
  38.             oDialog.Free;
  39.         INHERITED Free;
  40.     END; {Free}
  41.  
  42. {========================================}
  43.     PROCEDURE TOvals.Create (vPt: Point);
  44.         VAR
  45.             vItem: Integer;
  46.             i: Integer;
  47.             vRect: Rect;
  48.             vMax: LongInt;
  49.             vHSize, vVSize: LongInt;
  50.             vHDelta, vVDelta: LongInt;
  51.  
  52.     BEGIN
  53.         MoveTo(vPt.h, vPt.v);
  54.         WITH oDialog DO
  55.             BEGIN
  56.                 StringToNum(fStr[1], vMax);
  57.                 StringToNum(fStr[2], vHSize);
  58.                 StringToNum(fStr[3], vVSize);
  59.                 StringToNum(fStr[4], vHDelta);
  60.                 StringToNum(fStr[5], vVDelta);
  61.             END;
  62.         vItem := oDialog.fPopItem;
  63.  
  64.         WITH vPt DO
  65.             SetRect(vRect, h - vHSize, v - vVSize, h + vHSize, v + vVSize);
  66.         IF vMax > 0 THEN
  67.             FOR i := 1 TO vMax DO
  68.                 BEGIN
  69.                     CASE vItem OF
  70.                         kFrameOval: 
  71.                             FrameOval(vRect);
  72.                         kInvertOval: 
  73.                             InvertOval(vRect);
  74.                         kFrameRect: 
  75.                             FrameRect(vRect);
  76.                         kInvertRect: 
  77.                             InvertRect(vRect);
  78.                         OTHERWISE
  79.                     END;
  80.                     InsetRect(vRect, vHDelta, vVDelta);
  81.                 END;
  82.     END; {Create}
  83.  
  84. {========================================}
  85.     PROCEDURE TSpirals.Create (vPt: Point);
  86.         VAR
  87.             i, j: Integer;
  88.             x, y, z: LongInt;
  89.             dH, dV, dX: LongInt;
  90.             vMax: LongInt;
  91.  
  92.     BEGIN
  93.         MoveTo(vPt.h, vPt.v);
  94.         WITH oDialog DO
  95.             BEGIN
  96.                 StringToNum(fStr[1], dH);
  97.                 StringToNum(fStr[2], dV);
  98.                 StringToNum(fStr[3], vMax);
  99.             END;
  100.         x := 0;
  101.         y := 1;
  102.         z := -1;
  103.         IF vMax > 0 THEN
  104.             REPEAT
  105.                 x := x + 1;
  106.                 IF odd(x) THEN
  107.                     y := -y;
  108.                 IF odd(x + 1) THEN
  109.                     z := -z;
  110.                 dV := dV * y * z;
  111.                 dH := dH * z * y;
  112.                 Line(dH, dV);
  113.                 dX := dH + 2 * y;
  114.                 dH := dV + 2 * z;
  115.                 dV := dX;
  116.             UNTIL x = vMax;
  117.     END; {Create}
  118.  
  119. END. {unit MyShapes}
  120. {***********************************}